const { Controller } = require('egg');

class BaseController extends Controller {
  /**
   * 成功返回
   * @param {any} data 返回数据
   * @param {string} message 提示信息
   */
  success(data = null, message = 'success') {
    this.ctx.body = {
      code: 0,
      data,
      message,
    };
  }

  /**
   * 失败返回
   * @param {string} message 错误信息
   * @param {number} code 错误码
   * @param {any} data 返回数据
   */
  fail(message = 'fail', code = 1, data = null) {
    this.ctx.body = {
      code,
      data,
      message,
    };
  }

  /**
   * 获取请求参数
   * @param {string} field 字段名
   * @param {any} defaultValue 默认值
   */
  getParam(field, defaultValue = null) {
    const { ctx } = this;
    return ctx.request.body[field] || ctx.query[field] || ctx.params[field] || defaultValue;
  }

  /**
   * 分页参数处理
   */
  getPagination() {
    const { ctx } = this;
    const page = parseInt(ctx.query.page) || 1;
    const pageSize = parseInt(ctx.query.pageSize) || 10;
    return {
      page,
      pageSize
    };
  }

  /**
   * 检查用户是否登录
   */
  checkLogin() {
    const { ctx } = this;
    if (!ctx.user) {
      this.fail('请先登录', 401);
      return false;
    }
    return true;
  }
}

module.exports = BaseController;
